import { viteLogo } from './src/core/config'
import * as path from 'path'
import * as dotenv from 'dotenv'
import * as fs from 'fs'
import vuePlugin from '@vitejs/plugin-vue'
import { visualizer } from 'rollup-plugin-visualizer'
import Unocss from 'unocss/vite'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
// import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import envFiles from './environment'
// import DefineOptions from 'unplugin-vue-define-options/vite'
export default ({
  command,
  mode
}) => {
  for (const file of envFiles) {
    const envConfig = dotenv.parse(fs.readFileSync(file))
    for (const k in envConfig) {
      process.env[k] = envConfig[k]
    }
  }
  viteLogo(process.env)
  
  const optimizeDeps = {}
  const alias = {
    '@': path.resolve(__dirname, './src'),
    'vue$': 'vue/dist/vue.runtime.esm-bundler.js'
  }
  const esbuild = {}
  return {
    base: './', // index.html文件所在位置
    root: './', // js导入的资源路径，src
    resolve: {
      alias
    },
    define: {
      'process.env': {},
      __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: "true"
    },
    server: {
      // 如果使用docker-compose开发模式，设置为false
      open: true,
      port: process.env.VITE_CLI_PORT,
      proxy: {
        // 把key的路径代理到target位置
        [process.env.VITE_BASE_API]: { // 需要代理的路径   例如 '/api'
          target: `${process.env.VITE_BASE_PATH}:${process.env.VITE_SERVER_PORT}/`, // 代理到 目标路径
          changeOrigin: true,
          ws:true,
          rewrite: path => path.replace(new RegExp('^' + process.env.VITE_BASE_API), '')
        }
      }
    },
    build: {
      target: 'es2017',
      minify: 'terser', // 是否进行压缩,boolean | 'terser' | 'esbuild',默认使用terser
      manifest: false, // 是否产出manifest.json
      sourcemap: false, // 是否产出sourcemap.json
      outDir: 'dist', // 产出目录
      emptyOutDir: true, // 是否清空输出目录,改为true后 打包手动复制文件到dist功能将失效
      cssCodeSplit: true,
      brotliSize: false, //启用/禁用 brotli 压缩大小报告
      //chunk 大小警告的限制
      chunkSizeWarningLimit: 1000,
      terserOptions: {
        compress: {
          // warnings: false,
          passes: 1,// 控制压缩遍数
          drop_console: true,  //打包时删除console
          drop_debugger: true, //打包时删除 debugger
          pure_funcs: ['console.log']
        },
        output: {
          // 去掉注释内容
          comments: true
        }
      },
      //默认情况下，若 outDir 在 root 目录下，则 Vite 会在构建时清空该目录。
      rollupOptions: {
        output: {
          manualChunks(id) {
            //创建一个vendor包含所有依赖项的块node_modules
            if (id.includes('node_modules')) {
              return 'vendor'
            }
          }
        }
      }
    },
    esbuild,
    optimizeDeps,
    plugins: [
      // DefineOptions(),
      vuePlugin(),
      visualizer(),
      Unocss(),
      AutoImport({
        // resolvers: [ElementPlusResolver()],
        imports: [
          'vue',
          'vue-router',
          'pinia'
        ],
        dts: true
      }),
      Components({
        // dirs 指定组件所在位置，默认为 src/components
        // 可以让我们使用自己定义组件的时候免去 import 的麻烦
        dirs: ['src/components/','src/components/pub/'],
        // 配置需要将哪些后缀类型的文件进行自动按需引入
        extensions: ['vue', 'md'],
        // 解析的 UI 组件库，这里以 Element Plus 和 Ant Design Vue 为例
        // resolvers: [ElementPlusResolver()],
        dts:true
      }),
    ],
    css: {
      preprocessorOptions: {
        less: {
          // 支持内联 JavaScript
          javascriptEnabled: true
        },
        scss: {
          charset: false // 关闭sass的@charset输出,去除打包scss警告
        }
      },
      postcss: {
        plugins: [
          {
            postcssPlugin: 'internal:charset-removal',
            AtRule: {
              charset: (atRule) => {
                if (atRule.name === 'charset') {
                  atRule.remove()
                }
              }
            }
          }
        ]
      }
    }
  }
}
